Header First 设计模式-01-设计模式入门(To Be Done)

Header First 设计模式-01

设计模式入门

设计原则1-封装

找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。

即,把会变化的部分取出来并“封装“起来,好让其他部分不会受到影响。这样一来,系统变得更有弹性。

例如,把“鸭子”类的“飞行”行为独立出来,这样就可以为不同类的鸭子定义不同的飞行行为。

设计原则2-针对接口编程

针对接口编程,而不是针对实现编程。避免依赖于某个具体的实现类,避免被绑死在实际的实现类中。

针对接口编程”的真正意思是“针对超类型(supertype)编程“。 针对超类型(supertype)编程可以更明确地说成“变量的声明类型应该是超类型,通常是一个抽象类或是一个接口。这样,只要是具体实现此超类型的类所产生的的对象,都可以指定给这个变量。这也意味着,声明类时,不必理会以后执行时的真正对象类型!”

针对接口编程,关键就在多态

设计原则3-多用组合,少用继承

组合是将多个类结合起来使用。组合使建立系统具有很大的弹性,不仅可以将算法族封装成类,更可以在“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。

继承会导致代码在子类中重复,运行时不能改变其行为,同时,对父类的修改会导致出现其他子类不需要的改变。另一方面,也很难指定类的全部行为。

设计原则4-开放-关闭原则

类应该对扩展开放,对修改关闭。


策略模式(Strategy Pattern)

策略模式定义了算法(行为)族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖。当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

实现:

  • Subject接口:registerObserver(Observer o)removeObserver(Observer o)notifyObservers
  • Observer接口:update

Java内置对观察者模式的支持,包括Observer接口和Observable类(不是接口,内部包括一个setChanged 方法),支持push或pull的方式获取数据。

装饰者模式(Decorator Pattern)

装饰者和被装饰对象有着相同的超类型。

可以用一个或多个装饰者包装一个对象。

在任何需要原始对象(被包装者)的场合,可以用装饰过的对象替代它。(因为二者有相同的超类型)

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

每个装饰者都“有一个”(包装一个)组件,即装饰者有一个实例变量以保存某个被装饰者的引用。

装饰者实例:Java I/O 类:BufferedInputStream 为具体的装饰者,扩展自抽象的装饰类FilterInputStream:new BufferedInputStream(new FileInputStream("xx.txt"))

装饰者模式的缺点:利用装饰者模式,常造成设计中有大量的小类,如Java I/O包中的类。

工厂模式(Factory Pattern)

文章目录
  1. 1. Header First 设计模式-01
    1. 1.1. 设计模式入门
      1. 1.1.1. 设计原则1-封装
      2. 1.1.2. 设计原则2-针对接口编程
      3. 1.1.3. 设计原则3-多用组合,少用继承
      4. 1.1.4. 设计原则4-开放-关闭原则
    2. 1.2. 策略模式(Strategy Pattern)
    3. 1.3. 观察者模式(Observer Pattern)
    4. 1.4. 装饰者模式(Decorator Pattern)
    5. 1.5. 工厂模式(Factory Pattern)
|